// 行数
var rows = 20;
// 列数
var cols = 20;
// 雷数
var bombs =40;
// 存放所有tb的二维数组
var tds = []
// 记录游戏是否结束

var isOver = false;
// 创建扫雷表格
$("<table id ='tb'></table>").appendTo($("body"))
for(var i = 0;i<rows;i++)
{
    var $tr = $("<tr></tr>");
    $tr.appendTo($("#tb"));

    var temp = [];

    for(var j = 0;j<cols;j++)
    {
        var $td = $("<td></td>")
        .attr("state","normal")
        .addClass("cell")
        .appendTo($tr);

        $td[0].y = i;
        $td[0].x = j;
        temp.push($td);
    }
    tds.push(temp);
}
// console.log(tds);
// 随机生成所有雷的位置
var nums = [];
for (var i= 0;i<rows*cols;i++){
    nums[i] = i;
}
for (var i= 0;i<bombs;i++){
    var ind = Math.floor(Math.random()*nums.length);
    var n = nums[ind];
    nums.splice(ind,1);
    // comsole.log(n);
    var r = Math.floor(n/cols);
    var c = n%cols;
    // console.log("第"+r+"行，第"+c+"列");
    tds[r][c].attr("bomb","yes");
}

// 屏蔽右键菜单
$(".cell").on("contextmenu",function(e){
    e.preventDefault();
})
// 给所有的td绑定点击事件；

$(".cell").on("mousedown",function(e){
    if(isOver){
        return;
    }
   if(e.buttons==1){
    //    console.log("左键");
        if($(this).attr("state")!="normal"){
            return;
        }
        if($(this).attr("bomb")=="yes"){
            $(this).attr("state","bombex");
           gameover($(this));
            
        }else{
                openGrid($(this));
                if(checkwin()){
                    alert("恭喜您过关了");
                    isOver = ture;
                }
                // $(this).attr("state","open");
                // console.log(bombsNearby($(this)));
                

   }
  }  else if(e.buttons==2)
    {
    // console.log("右键");
        if($(this).attr("state")=="normal"){
           $(this).attr("state","flag");
        }else{
        $(this).attr("state","normal");
        }          
    }

});
// 计算某个td周围几个雷
function bombsNearby($td){
    var nums=0;
//     // 左上
//     var tx = $td.x-1;
//     var ty = $td.y-1;
//     if(tx>=0&&ty>=0){
//             if(tds[ty][tx].attr("bomb")=="yes"){
//                 num++;
//             }
//     }
    for(var i = $td[0].x - 1;i<=$td[0].x + 1;i++){
        for(var j = $td[0].y - 1;j<=$td[0].y + 1;j++){
            if(i==$td[0].x&&j==$td[0].y){
                continue;
            }
            if(i<0||i>=cols||j<0||j>=rows){
                continue;
            }
            if(tds[j][i].attr("bomb")=="yes"){
                nums++;
            }
        }
       
    }

    return nums;
}
// 游戏失败函数
function gameover($td){
    for(var i=0;i<rows;i++){
        for(var j =0;j<cols;j++){
            if(tds[i][j].attr("bomb")=="yes"){
                tds[i][j].attr("state","bombpl");
            }
        }
    }
    $td.attr("state","bombex");
    alert("GAME OVER");
    isOver = true;
}
// 打开某个格子
function openGrid($td){
    var num = bombsNearby($td);

    $td.attr("state","b"+num);
    if(num ==0){
        for(var i = $td[0].x - 1;i<=$td[0].x + 1;i++){
            for(var j = $td[0].y - 1;j<=$td[0].y + 1;j++){
                if(i==$td[0].x&&j==$td[0].y){
                    continue;
                }
                if(i<0||i>=cols||j<0||j>=rows){
                    continue;
                }
                if(tds[j][i].attr("state")=="normal"){
                    openGrid(tds[j][i]);
                }
            }
           
        }
    
    }
}

// 判断是否胜利的函数
function checkwin(){
    for(var i =0;i<rows;i++){
        for(var j =0;j<cols;j++){
                if(tds[i][j].attr("bomb")!="yes"&&tds[i][j].attr("state")=="normal"){
                    return false;
                }
        }
    }
    return true;
}
// 重新开始游戏（刷新页面）
$("#restart").on("click",function(){
    location.reload();
});



